レプリケーション replication
ネットワークで接続された複数のマシンに同じデータのコピーを保持しておくこと
目的
地理的に近いデータを保持する
可用性 Availabilityを高める
読み取りを分離しスケールアウトさせる
変更のアルゴリズム
シングルリーダー
マルチリーダー
リーダーレス
レプリカ replica
データのコピーを保持する各ノード
リーダーベースレプリケーション
リーダー leaderとフォロワー follower
いわゆるmaster/slave
同期型と非同期型
同期型
フォロワーが最新のデータを持っておりリーダーとの一貫性が保証されている
フォロワーが利用不可能だとリーダーの書き込みをブロックする
なのですべてを同期にするのは現実的ではない
通常は1つだけ同期でほかは非同期
RDS for MySQLとかはこれ
準同期型 semi-synchronous
MySQLの準同期レブリケーションと紛らわしいね
非同期型
クライアントから見たときの永続性 Durabilityが保証されていない
レプリケーションラグ
一時的に一貫性 consistencyを失っている
結果整合性 eventual consistency
read-after-write一貫性
自分の書き込みが読み込んだときに反映されてることを保証する一貫性
他人の書き込みには興味がない
実装
自分しか更新しないデータ(プロフィールとか)の場合はリーダーから読み取る
...
自分が複数いる場合(ブラウザとアプリとか)はさらに考慮事項が増える
モノトニックな読み取り
複数のレプリカから読み取りを行う場合過去に遡って情報が見えてしまう
モノトニックな読み取りは時間が巻き戻ることはないことを保証する
一貫性のあるプレフィックス読み取り
ある順序で書き込まれた場合、それを読み取る人は必ず同じ順序で見えることを保証する
パーティショニングしたとき問題になる
チェーンレプリケーション